/*!
 * myznala-yui.js
 * 
 *  tetsuya_odaka (EzoGP)
 * 
 * (C) 2009, EzoGP.
 * $Id: syracava-1.0-min.js 455 2009-04-08 08:54:14Z tetsuya_odaka $
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/***************************************************************
 * Login用のオブジェクト
 * 
 *  （クロージャーパターンで実装）
 * 
 *     Tetsuya Odaka  ( EzoGP )
 *     
 *     modified;	2009/5/25	t.odaka	AUTH_TYPE='ACCEPT'対応。
 * 
 ***************************************************************/
var MyLogin = function() {
	var Event	= YAHOO.util.Event;
	var Dom		= YAHOO.util.Dom;
	var Connect	= YAHOO.util.Connect;
	
	var loginPanel;
	var valObj;

	/*
	* Login/Logoutのリンクをクリックした時のハンドラ
	*/
	var clickHdlr = function(_evt){
		Event.preventDefault(_evt);
		// id=loginはトグルにする
		if(Dom.hasClass('egp-my-login','egp-my-logout')){
			loginHdlr();
		}else{
			logoutHdlr();
		}
	}
	
	/******************************************************
	* Login時のハンドラ
	*/
	var loginHdlr = function(){

		Dom.get('egp-my-loginname').innerHTML = null;
		Dom.get('egp-my-xhrerror').innerHTML = '';

		var _url	= '../Myznala/myLogin.inc.txt';
		// ajaxで検証
		Connect.asyncRequest('GET',_url,
						createLoginCallback);
	}

	/*
	* Login時のコールバック
	*/
	var createLoginCallback = {
    	success : function(_obj) {
			// XHRの戻り値の取得（Login用Div）
			var _ret = _obj.responseText;
			if(_ret.length > 0){
		    	// Panelオブジェクトは、ページスコープで一回だけ生成する。
		        if (!loginPanel) {
					// ログイン用のモーダルパネルを生成する。
		        	loginPanel = new YAHOO.widget.Panel("egp-my-loginpannel",  
								{ 
		                       	fixedcenter: true, 
		                       	close: false, 
		                       	draggable: false, 
								// 一番上に出す。
		                       	zindex:10,
								// Modal指定。
		                       	modal: true,
								// showされるまでは見えない。
		                   		visible: false
		            			} 
		        	);

					// loginDialogを定義する
		        	loginPanel.setHeader("Login");
		        	loginPanel.setBody(_ret);
		        	loginPanel.render(document.body);
		    		
		    		Dom.get('egp-my-msg').innerHTML = '';
		    		Dom.get('egp-my-auth1').value = '';
		    		Dom.get('egp-my-auth2').value = '';
		        	
				}
		        // ログインダイアログの表示
		       	Dom.setStyle("egp-my-logindialog","visibility","visible");
		        loginPanel.show();
			}
		},
		
     	failure : function(_obj) {
 			var _resId = _obj.argument.resId;

 			var _ret = 'ステータス: ' + _obj.status + 'ステータステキスト: ' +
 						_obj.statusText + '読み込みに失敗しました。';
 			// エラーのハンドル（皆さん適当に）
 			Dom.get('egp-my-xhrerror').innerHTML = _ret;	     
 		}
	 };

	/******************************************************
	* ログインダイアログでログインボタンをクリックした時のハンドラ
	*/
	var loginClickHdlr = function(){
		// エラーメッセージのクリア
		Dom.get('egp-my-msg').innerHTML = '';

		var _url	= '../Myznala/myLogin.php';
		var _parm 	= 'auth1=' + Dom.get('egp-my-auth1').value + 
							'&' + 'auth2=' + Dom.get('egp-my-auth2').value;
		// 戻ってきたときのために、メッセージ表示用エレメントのidをセットする。
		var _arg ={
			'resId'	: 'egp-my-msg'
		};
		loginCallback.argument = _arg;
		// ajaxで検証
		Connect.asyncRequest('POST',_url,
						loginCallback, _parm);
	}
	
	/*
	* Login時のコールバック
	*/
	var loginCallback = {
    	success : function(_obj) {
			var _resId = _obj.argument.resId;
			// XHRの戻り値の取得（エラーメッセージ）
			var _ret = _obj.responseText;

			// 戻り値がE-Mailアドレスかどうか検証
			var _wkRet = valObj.validate('ja','isEmail',_ret);

			//alert(_wkRet['isEmail'].length);
			// エラー時の処理
			if('isEmail' in _wkRet){
				// エラーのハンドル（皆さん適当に）
				// エラーが複数のときは複数行にして表示する。
				if(Dom.get(_resId).innerHTML.length > 0){
					Dom.get(_resId).innerHTML += ' &nbsp ' +_ret;
				}else{
					Dom.get(_resId).innerHTML = _ret;
				}
			}else{
				// ログイン成功
				loginPanel.hide();
		     	Dom.setStyle("egp-my-logindialog",
		     					"visibility","hidden");
				// エラーメッセージのクリア
				Dom.get('egp-my-msg').innerHTML = '';
				// Logoutを表示
				Dom.removeClass('egp-my-login','egp-my-logout');
				Dom.addClass('egp-my-login','egp-my-login');
				Dom.get('egp-my-login').innerHTML = "Logout";
				Dom.get('egp-my-loginname').innerHTML = _ret;
			}
		},
		
     	failure : function(_obj) {
 			var _resId = _obj.argument.resId;

 			var _ret = 'ステータス: ' + _obj.status + 'ステータステキスト: ' +
 						_obj.statusText + '読み込みに失敗しました。';
 			// エラーのハンドル（皆さん適当に）
 			Dom.get(_resId).innerHTML = _ret;	     
 		}
	 };

	/******************************************************
	* Logout時のハンドラ
	*/
	var logoutHdlr = function(){
		// Loginを表示
		Dom.removeClass('egp-my-login','egp-my-login');
		Dom.addClass('egp-my-login','egp-my-logout');
		Dom.get('egp-my-login').innerHTML = "Login";
		Dom.get('egp-my-loginname').innerHTML = '';
		// エラーメッセージのクリア
		//Dom.get('egp-my-msg').innerHTML = '';

		// session削除のためのajax
		var _url	= '../Myznala/myLogout.php';
		// ajaxで検証
		Connect.asyncRequest('POST',_url,
						logoutCallback);
	}

	/*
	* Logout時のコールバック
	*/
	var logoutCallback = {
	    	success : function(_obj) {},
	     	failure : function(_obj) {
	 			var _ret = 'ステータス: ' + _obj.status + 'ステータステキスト: ' +
	 						'Logoutに失敗しました';
	 			// エラーのハンドル（皆さん適当に）
	 			Dom.get('egp-my-xhrerror').innerHTML = _ret;	     
	 		}
		 };

	/******************************************************
	* login済みかどうかをチェックするinitial処理のハンドラ
	*
	*/

	var loginCheckHdlr = function(){

		// session testのためのajax
		var _url	= '../Myznala/myLoginCheck.php';
		// ajaxで検証
		Connect.asyncRequest('POST',_url,
						loginCheckCallback);
	}

	/*
	* login済みかどうかをチェックするajaxのコールバック
	*/
	var loginCheckCallback = {
	    	success : function(_obj) {
				// XHRの戻り値の取得（エラーメッセージ）
				var _ret = _obj.responseText;
				
				if(_ret == 'accepted'){
			     	Dom.setStyle("egp-my-login",
			     			"visibility","visible");
					Dom.get('egp-my-loginname').innerHTML = null;
			     	Dom.setStyle("egp-my-loginname",
			     			"visibility","visible");
					Dom.addClass('egp-my-login','egp-my-logout');
					
				} else if (_ret != null && _ret.length > 0){
					// 認証ありの場合
					// 戻り値がE-Mailアドレスかどうか検証
					var _wkRet = valObj.validate('ja','isEmail',_ret);
					
			     	Dom.setStyle("egp-my-login",
			     			"visibility","visible");
			     	Dom.setStyle("egp-my-loginname",
			     			"visibility","visible");
					
					if('isEmail' in _wkRet){
						// Emailアドレスではない場合
						// ログインを促す。
						loginHdlr();				
					}else{
						// Emailアドレスの場合
						// Logoutを表示
						Dom.removeClass('egp-my-login','egp-my-logout');
						Dom.addClass('egp-my-login','egp-my-login');
						Dom.get('egp-my-login').innerHTML = "Logout";
						Dom.get('egp-my-loginname').innerHTML = _ret;
					}
				}else{
					// 非認証の場合
				}
			},
			
	     	failure : function(_obj) {
	 			var _ret = 'ステータス: ' + _obj.status + 'ステータステキスト: ' +
	 						'Testに失敗しました';
	 			// エラーのハンドル（皆さん適当に）
				alert('_ret');
			}
	};
	
	this.init = function(){
		// ログインダイアログを表示するハンドラー
        Event.on("egp-my-login", 
    	        	"click", 
    	        	clickHdlr);

        // ダイアログ内のLoginボタンのハンドラー
        Event.on("egp-my-loginbutton", 
    				"click", 
    				loginClickHdlr);

        // 認証方式と、login状況のcheck。
		loginCheckHdlr();
		
		// 検証オブジェクトの初期化
		valObj 	= 	new MyValidator();
	};

	return this;
};

/***************************************************************
 * Menu用のオブジェクト
 * 
 *  （クロージャーパターンで実装）
 * 
 *     Tetsuya Odaka  ( EzoGP )
 * 
 ***************************************************************/
var MyMenu = function() {
	var Event	= YAHOO.util.Event;
	var Dom		= YAHOO.util.Dom;
	var Connect	= YAHOO.util.Connect;
	var TreeView = YAHOO.widget.TreeView;
	var Anim	= YAHOO.util.Anim;
	var tree;

	/*
	* メニューリンクをクリックしたときのハンドラ
	*/
	var menuClickHdlr = function(_evt){
		Event.preventDefault(_evt);

		// メッセージのクリア
		Dom.get('egp-my-xhrerror').innerHTML = '';
		Dom.get('egp-my-treemenu').innerHTML = '';

		var _url	= '../Myznala/myMenu.php';
		var _arg 	= {
			'errId'	:	'egp-my-xhrerror',
			'resId'	: 	'egp-my-treemenu'
		};
		menuCallback.argument = _arg;
		// ajaxで検証
		YAHOO.util.Connect.asyncRequest('POST',_url,
						menuCallback);
	}
		
	/*
	* メニュー取得時のコールバック
	*/
	var menuCallback = {
    	success : function(_obj) {
			var _resId = _obj.argument.resId;
			var _errId = _obj.argument.errId;

			// XHRの戻り値の取得（メニュー文字列）
			var _ret = _obj.responseText;

			// メニューの表示
			if(	_ret.length > 0){
				Dom.get(_resId).innerHTML = _ret;
				Event.onAvailable(_resId ,
					function(){
						// loginの25px下にだす。
						var _xy = Dom.getXY('egp-my-login');
						Dom.setXY('egp-my-menuregion', [_xy[0],_xy[1]+25]);
		 	     		//Treeのインスタンス化:
		 		     	_tree = new TreeView(_resId);
						_tree.render();
//						_tree.expandAll();
		 	     	}
		 	    );
		 	    
	 	     	// Animation
	 	     	Dom.setStyle('egp-my-menuopen','visibility','hidden');
	 	     	var attributes = {
	 	   	        opacity: { to: 0.9 }
	 	   	    };

		 		// Animオブジェクトのインスタンス化
			    var anim = new Anim('egp-my-menuregion', attributes,
	    	    		0.5,YAHOO.util.Easing.backIn);
				anim.animate(); 	 	   		
				Dom.setStyle('egp-my-menuregion','visibility','visible');
				Dom.setStyle('egp-my-menuclose','visibility','visible');
				
			}else{
	 			// エラーのハンドル（皆さん適当に）
				Dom.get(_errId).innerHTML = 'メニューの取得に失敗しました.';
			}
		},
		
     	failure : function(_obj) {
 			var _errId = _obj.argument.errId;
 			var _ret = 'ステータス: ' + _obj.status + 'ステータステキスト: ' +
 						_obj.statusText + ' メニューの取得に失敗しました。';
 			// エラーのハンドル（皆さん適当に）
 			Dom.get(_errId).innerHTML = _ret;	     
 		}
	 };

	/*
	* メニュークローズをクリックしたときのハンドラ
	*/
	var menuCloseHdlr = function(_evt){
		Event.preventDefault(_evt);
		// Animation
		
		var attributes = {
	   	        opacity: { to: 0 }
	   	    };
 		// Animオブジェクトのインスタンス化
	    var anim = new Anim('egp-my-menuregion', attributes,
	    				0.5,YAHOO.util.Easing.backIn);
	    anim.onComplete.subscribe(
			function(){
				Dom.setStyle('egp-my-menuclose','visibility','hidden');
	    		Dom.setStyle('egp-my-menuopen','visibility','visible');
	    	}
	    );
		anim.animate(); 	   		
	};

	this.init = function(){
		// メニューのハンドラー
		Event.on('egp-my-menuopen',
		   		'click',
        		menuClickHdlr);

	   	// メニュー・クローズのハンドラー
       	Event.on('egp-my-menuclose',
    	       'click',
    	       menuCloseHdlr);
	};
	
	return this;
};

/***************************************************************
 * ヘルプ生成用のオブジェクト
 * 
 *  （クロージャーパターンで実装）
 * 
 *     Tetsuya Odaka  ( EzoGP )
 * 
 ***************************************************************/
var MyHelp = function() {
	var Event	= YAHOO.util.Event;
	var Dom		= YAHOO.util.Dom;
	var Connect	= YAHOO.util.Connect;
	var Panel 	= YAHOO.widget.Panel;
	
	var helpPanel;
	var helpPath;

	this.setHelpPath = function(_str){
		helpPath = _str;
	};
	
	/**
	* メニューリンクをクリックしたときのハンドラ
	*/
	var helpClickHdlr = function(_evt){
		Event.preventDefault(_evt);

		// メッセージのクリア
		Dom.get('egp-my-xhrerror').innerHTML = '';
		Dom.get('egp-my-helpregion').innerHTML = '';

		var _url	= '../Myznala/myHelp.php';
		var _arg ={
			'errId'	:	'egp-my-xhrerror',
			'resId'	: 	'egp-my-helpregion',
			'pointx' :   null,
			'pointy' :   null
		};
		helpCallback.argument = _arg;
		var _parm = 'fname=' +  
					Dom.get('egp-my-pagename').innerHTML + 
					'&fpath=' + helpPath;
		// ajaxで検証
		YAHOO.util.Connect.asyncRequest('POST',_url,
						helpCallback, _parm);
	}
		
	/**
	* ヘルプ取得時のコールバック
	*/
	var helpCallback = {
    	success : function(_obj) {
			var _resId = _obj.argument.resId;
			var _errId = _obj.argument.errId;
			var _pointx = _obj.argument.pointx;
			var _pointy = _obj.argument.pointy;

			// XHRの戻り値の取得（メニュー文字列）
			var _ret = _obj.responseText;

			// メニューの表示
			if(_ret.length > 0){
				if(_pointx==null){
					// loginの25px下にだす。
					var _xy = Dom.getXY('egp-my-login');
					var _pos = [_xy[0],_xy[1]+25];
				}
				else{
					var _pos = [_pointx,_pointy];
				}
		 		//Panelのインスタンス化:
				helpPanel = new Panel("hpanel", 
							{ 	width:"400px", 
								visible:true, 
								draggable:true, 
								close:true,
								constraintoviewport:true,
								xy:_pos
							}
				);
				helpPanel.setHeader("Help");
				helpPanel.setBody(_ret);
				helpPanel.setFooter(Dom.get('egp-my-pagename').innerHTML);
				helpPanel.render("egp-my-helpregion");
			} else {
	 			// エラーのハンドル（皆さん適当に）
				Dom.get(_errId).innerHTML = 'メニューの取得に失敗しました.';
			}
		},
		
     	failure : function(_obj) {
 			var _errId = _obj.argument.errId;
 			var _ret = 'ステータス: ' + _obj.status + 'ステータステキスト: ' +
 						_obj.statusText + ' メニューの取得に失敗しました。';
 			// エラーのハンドル（皆さん適当に）
 			Dom.get(_errId).innerHTML = _ret;	     
 		}
	 };

	this.init = function(){
    	// ヘルプ画面のハンドラー
		Event.on('egp-my-help',
		   			'click',
        		helpClickHdlr);
	}

	/**
	* 外部から直接利用するためのメソッド
	*/
	this.createMenu = function(evt, file){
		Event.preventDefault(evt);

		// メッセージのクリア
		Dom.get('egp-my-xhrerror').innerHTML = '';
		Dom.get('egp-my-helpregion').innerHTML = '';

		var _url	= '../Myznala/myHelp.php';
//		alert(YAHOO.lang.dump(evt));

		if(Event.getPageX(evt)<500){
			var pointx=Event.getPageX(evt)+50;
		}else{
			var pointx=Event.getPageX(evt)-450;
		}
		
		var _arg ={
			'errId'	:	'egp-my-xhrerror',
			'resId'	: 	'egp-my-helpregion',
			'pointx' :   pointx,
			'pointy' :   Event.getPageY(evt)
		};
		helpCallback.argument = _arg;
		var _parm = 'file='+file;
		// ajaxで検証
		YAHOO.util.Connect.asyncRequest('POST',_url,
						helpCallback, _parm);
	}
	
	return this;
};

/* powered by Eclipse Ganymede, designed by EzoGP Project. */